1ce02b015e5dbcc6f10bb3a4580c3fd8f995ea88,src/gr/uom/java/ast/decomposition/cfg/MethodCallAnalyzer.java,MethodCallAnalyzer,processArgumentOfExternalMethodInvocation,#MethodDeclaration#AbstractVariable#number#VariableDeclaration#Set#number#,437

Before Change



			for(AbstractVariable originalField : methodBodyObject.getDefinedFieldsThroughParameters()) {
				if(parameterDeclaration.resolveBinding().getKey().equals(originalField.getVariableBindingKey())) {
					AbstractVariable field = new CompositeVariable(argumentDeclaration.getVariableBindingKey(), argumentDeclaration.getVariableName(),
							argumentDeclaration.getVariableType(), argumentDeclaration.isField(), argumentDeclaration.isParameter(), argumentDeclaration.isStatic(), ((CompositeVariable)originalField).getRightPart());
					definedVariables.add(field);
				}
			}
			for(AbstractVariable originalField : methodBodyObject.getUsedFieldsThroughParameters()) {
				if(parameterDeclaration.resolveBinding().getKey().equals(originalField.getVariableBindingKey())) {
					AbstractVariable field = new CompositeVariable(argumentDeclaration.getVariableBindingKey(), argumentDeclaration.getVariableName(),
							argumentDeclaration.getVariableType(), argumentDeclaration.isField(), argumentDeclaration.isParameter(), argumentDeclaration.isStatic(), ((CompositeVariable)originalField).getRightPart());
					usedVariables.add(field);
				}
			}
			processedMethods.add(methodBinding.getKey());
			Map<AbstractVariable, LinkedHashSet<MethodInvocationObject>> invokedMethodsThroughParameters = methodBodyObject.getInvokedMethodsThroughParameters();
			for(AbstractVariable originalField : invokedMethodsThroughParameters.keySet()) {
				if(parameterDeclaration.resolveBinding().getKey().equals(originalField.getVariableBindingKey())) {
					AbstractVariable field = null;
					if(originalField instanceof PlainVariable)
						field = argumentDeclaration;
					else
						field = new CompositeVariable(argumentDeclaration.getVariableBindingKey(), argumentDeclaration.getVariableName(),
								argumentDeclaration.getVariableType(), argumentDeclaration.isField(), argumentDeclaration.isParameter(), argumentDeclaration.isStatic(), ((CompositeVariable)originalField).getRightPart());
					LinkedHashSet<MethodInvocationObject> methodInvocations = invokedMethodsThroughParameters.get(originalField);
					for(MethodInvocationObject methodInvocationObject : methodInvocations) {
						MethodInvocation methodInvocation2 = methodInvocationObject.getMethodInvocation();

After Change


		}
	}

	private void processArgumentOfExternalMethodInvocation(MethodDeclaration methodDeclaration, AbstractVariable argumentDeclaration, int initialArgumentPosition,
			VariableDeclaration parameterDeclaration, Set<String> processedMethods, int depth) {
		LibraryClassStorage instance = LibraryClassStorage.getInstance();
		IMethodBinding methodBinding = methodDeclaration.resolveBinding();
		Block methodBody = methodDeclaration.getBody();
		if(methodBody != null) {
			IMethod iMethod = (IMethod)methodBinding.getJavaElement();
			IClassFile iClassFile = iMethod.getClassFile();
			ASTInformationGenerator.setCurrentITypeRoot(iClassFile);
			MethodBodyObject methodBodyObject = new MethodBodyObject(methodBody);

			for(AbstractVariable originalField : methodBodyObject.getDefinedFieldsThroughParameters()) {
				if(parameterDeclaration.resolveBinding().getKey().equals(originalField.getVariableBindingKey())) {
					AbstractVariable field = new CompositeVariable(argumentDeclaration, ((CompositeVariable)originalField).getRightPart());
					definedVariables.add(field);
				}
			}
			for(AbstractVariable originalField : methodBodyObject.getUsedFieldsThroughParameters()) {
				if(parameterDeclaration.resolveBinding().getKey().equals(originalField.getVariableBindingKey())) {
					AbstractVariable field = new CompositeVariable(argumentDeclaration, ((CompositeVariable)originalField).getRightPart());
					usedVariables.add(field);
				}
			}
			processedMethods.add(methodBinding.getKey());
			Map<AbstractVariable, LinkedHashSet<MethodInvocationObject>> invokedMethodsThroughParameters = methodBodyObject.getInvokedMethodsThroughParameters();
			for(AbstractVariable originalField : invokedMethodsThroughParameters.keySet()) {
				if(parameterDeclaration.resolveBinding().getKey().equals(originalField.getVariableBindingKey())) {
					AbstractVariable field = null;
					if(originalField instanceof PlainVariable)
						field = argumentDeclaration;
					else
						field = new CompositeVariable(argumentDeclaration, ((CompositeVariable)originalField).getRightPart());
					LinkedHashSet<MethodInvocationObject> methodInvocations = invokedMethodsThroughParameters.get(originalField);
					for(MethodInvocationObject methodInvocationObject : methodInvocations) {
						MethodInvocation methodInvocation2 = methodInvocationObject.getMethodInvocation();